home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2oak-wrapper < prev    next >
Text File  |  2009-10-19  |  17KB  |  705 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2oak-wrapper.in,v 1.47 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. #    HP Color LaserJet 1500:    -z0 (mirror bytes)
  27. #
  28. #    Kyocera Mita KM-1635:    -z1 (rotate 90)
  29. #
  30.  
  31. PROGNAME="$0"
  32. BASENAME=`basename $PROGNAME`
  33. PREFIX=/usr
  34. SHARE=$PREFIX/share/foo2oak
  35. PATH=$PATH:/sw/bin:/opt/local/bin
  36.  
  37. #
  38. #    Log the command line, for debugging and problem reports
  39. #
  40. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  41.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  42. fi
  43.  
  44. usage() {
  45.     cat <<EOF
  46. Usage:
  47.     $BASENAME [options] [ps-file]
  48.  
  49.     Foomatic printer wrapper for the foo2oak printer driver.
  50.     This script reads a Postscript ps-file or standard input
  51.     and converts it to Oak Technoligies OAKT printer format.
  52.  
  53. Normal Options:
  54. -b bits           Bits per plane (1 or 2) [$BPP]
  55. -c                Print in color (else monochrome)
  56. -m media          Media code to send to printer [$MEDIA]
  57.                     0=auto 1=plain 2=preprinted 3=letterhead 4=graytrans
  58.                     5=prepunched 6=labels 7=bond 8=recycled 9=color
  59.                     10=cardstock 11=heavy 12=envelope 13=light 14=tough
  60.             15=vellum 16=rough 19=thick 20=highqual
  61. -p paper          Paper code [$PAPER]
  62.                     1=letter, 3=ledger, 5=legal, 6=statement, 7=executive,
  63.             8=A3, 9=A4, 11=A5, 12=B4, 13=B5jis, 14=folio, 19=env9,
  64.             20=env10, 27=envDL, 28=envC5, 30=envC4, 37=envMonarch,
  65.             257=A6, 258=B6, 259=B5iso, 260=env6
  66. -n copies         Number of copies [$COPIES]
  67. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  68. -s source         Source code to send to printer [$SOURCE]
  69.                     1=tray1, 4=manual, 7=auto
  70.             Code numbers may vary with printer model.
  71. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  72.                   Print with N-up (requires psutils)
  73. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  74.  
  75. Printer Tweaking Options:
  76. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  77. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  78. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  79.                   0=no, 1=Y, 2=X, 3=XY
  80. -z model          Model: 0=HP CLJ 1500, 1=KM-1635/KM-2035 [$MODEL]
  81.  
  82. Color Tweaking Options:
  83. -g gsopts         Additional options to pass to Ghostscript, such as
  84.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  85. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  86.                   adjust colors using the setcolorrendering PS operator.
  87.                   $SHARE/icm/ will be searched for profile.icm.
  88. -I intent         Select profile intent from ICM file [$INTENT]
  89.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  90. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  91.                   color correction using the setcolortransfer PS operator.
  92.  
  93. Debugging Options:
  94. -S plane          Output just a single color plane from a color print [all]
  95.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  96. -D lvl            Set Debug level [$DEBUG]
  97. -V                $VERSION
  98. EOF
  99.  
  100.     exit 1
  101. }
  102.  
  103. #
  104. #       Report an error and exit
  105. #
  106. error() {
  107.     echo "$BASENAME: $1" >&2
  108.     exit 1
  109. }
  110.  
  111. dbgcmd() {
  112.     if [ $DEBUG -ge 1 ]; then
  113.         echo "$@" >&2
  114.     fi
  115.     "$@"
  116. }
  117.  
  118. #
  119. #    N-up-ify the job.  Requires psnup from psutils package
  120. #
  121. nup() {
  122.     case "$NUP" in
  123.     [2368]|1[0458])
  124.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  125.     ;;
  126.     [49]|1[26])
  127.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  128.     ;;
  129.     *)
  130.     error "Illegal call to nup()."
  131.     ;;
  132.     esac
  133. }
  134.  
  135. #
  136. #       Process the options
  137. #
  138.  
  139. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  140. # fallback to whatever the Linux distro has installed (usually 7.07)
  141. #
  142. # N.B. := operator used here, when :- would be better, because "ash"
  143. # doesn't have :-
  144. if gs.foo -v >/dev/null 2>&1; then
  145.         GSBIN=${GSBIN:-gs.foo}
  146. else
  147.         GSBIN=${GSBIN:-gs}
  148. fi
  149.  
  150. BPP=1
  151. CMDLINE="$*"
  152. DEBUG=0
  153. DUPLEX=1
  154. COLOR=
  155. COLORMODE=default
  156. MODEL=0
  157. QUALITY=wts
  158. MEDIA=1
  159. COPIES=1
  160. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  161. test "$PAPER" || PAPER=1
  162. RES=600x600
  163. SOURCE=7
  164. NUP=
  165. CLIP_UL=
  166. CLIP_LR=
  167. CLIP_LOG=
  168. BC=
  169. AIB=
  170. COLOR2MONO=
  171. GAMMAFILE=default
  172. INTENT=0
  173. GSOPTS=
  174. NUP_ORIENT=
  175. GSDEV=-sDEVICE=pbmraw
  176. # What mode to use if the user wants us to pick the "best" mode
  177. case `$GSBIN --version` in
  178. 7*)    DEFAULTCOLORMODE=10
  179.     ;;
  180. 8.1*)
  181.     DEFAULTCOLORMODE=10
  182.     QUALITY=1
  183.     ;;
  184. *)    DEFAULTCOLORMODE=10
  185.     ;;
  186. esac
  187. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:z:ABS:D:G:I:Vh?" opt
  188. do
  189.     case $opt in
  190.     b)    BPP=$OPTARG;;
  191.     c)    COLOR=-c;;
  192.     d)    DUPLEX="$OPTARG";;
  193.     g)    GSOPTS="$GSOPTS $OPTARG";;
  194.     m)    MEDIA="$OPTARG";;
  195.     n)    COPIES="$OPTARG";;
  196.     p)    PAPER="$OPTARG";;
  197.     q)    QUALITY="$OPTARG";;
  198.     r)    RES="$OPTARG";;
  199.     s)    SOURCE="$OPTARG";;
  200.     z)    MODEL="$OPTARG";;
  201.     l)    CLIP_LR="-l $OPTARG";;
  202.     u)    CLIP_UL="-u $OPTARG";;
  203.     L)    CLIP_LOG="-L $OPTARG";;
  204.     A)    AIB=-A;;
  205.     B)    BC=-B;;
  206.     C)    COLORMODE="$OPTARG";;
  207.     S)    COLOR2MONO="-S$OPTARG";;
  208.     D)    DEBUG="$OPTARG";;
  209.     G)    GAMMAFILE="$OPTARG";;
  210.     I)    INTENT="$OPTARG";;
  211.     [234689])    NUP="$opt";;
  212.     [57])    error "Can't find acceptable layout for $opt-up";;
  213.     1)    case "$OPTARG" in
  214.         [024568])    NUP="1$OPTARG";;
  215.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  216.         esac
  217.         ;;
  218.     o)    case "$OPTARG" in
  219.         l*)    NUP_ORIENT=-l;;
  220.         s*)    NUP_ORIENT=-r;;
  221.         p*|*)    NUP_ORIENT=;;
  222.         esac;;
  223.     V)    echo "$VERSION"; foo2oak -V; foo2zjs-pstops -V; exit 0;;
  224.     h|\?)
  225.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  226.             echo "Illegal command:"
  227.             echo "    $0 $CMDLINE"
  228.             echo
  229.         fi
  230.         usage;;
  231.     esac
  232. done
  233. shift `expr $OPTIND - 1`
  234.  
  235. #
  236. # If there is an argument left, take it as the file to print.
  237. # Else, the input comes from stdin.
  238. #
  239. if [ $# -ge 1 ]; then
  240.     if [ "$LPJOB" = "" ]; then
  241.     : # LPJOB="$1"
  242.     fi
  243.     exec < $1
  244. fi
  245.  
  246. #
  247. #    Select the ghostscript device to use
  248. #
  249. case "$BPP" in
  250. 1)    if [ "" = "$COLOR" ]; then
  251.         GSDEV=-sDEVICE=pbmraw
  252.     else
  253.         GSDEV=-sDEVICE=bitcmyk
  254.     fi
  255.     ;;
  256. 2)    if [ "" = "$COLOR" ];
  257.     then
  258.         GSDEV=-sDEVICE=pgmraw
  259.     else
  260.         GSDEV="-sDEVICE=cups -dcupsColorSpace=6 -dcupsBitsPerColor=2"
  261.     fi
  262.     ;;
  263. *)    error "Illegal number of bits per plane ($BPP)";;
  264. esac
  265.  
  266. #
  267. case "$QUALITY" in
  268. 0)
  269.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  270.     ;;
  271. 1)
  272.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  273.     ;;
  274. 2)
  275.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  276.     ;;
  277. wts)
  278.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  279.     ;;
  280. esac
  281.  
  282. #
  283. #    Validate model code
  284. #
  285. case "$MODEL" in
  286. 0)    MIRROR=1; ROTATE90=0;;
  287. 1)    MIRROR=0; ROTATE90=1;;
  288. *)    error "Unknown model code $MODEL";;
  289. esac
  290.  
  291. #
  292. #    Validate media code
  293. #
  294. case "$MEDIA" in
  295. 0|auto)        MEDIA=0;;
  296. 1|plain)    MEDIA=1;;
  297. 2|preprinted)    MEDIA=2;;
  298. 3|letterhead)    MEDIA=3;;
  299. 4|transparency)    MEDIA=4;;
  300. 5|prepunched)    MEDIA=5;;
  301. 6|labels)    MEDIA=6;;
  302. 7|bond)        MEDIA=7;;
  303. 8|recylcled)    MEDIA=8;;
  304. 9|color)    MEDIA=9;;
  305. 10|cardstock)    MEDIA=10;;
  306. 11|heavy)    MEDIA=11;;
  307. 12|envelope)    MEDIA=12;;
  308. 13|light)    MEDIA=13;;
  309. 14|tough)    MEDIA=14;;
  310.  
  311. 15|vellum)    MEDIA=15;;
  312. 16|rough)    MEDIA=16;;
  313. 19|thick)    MEDIA=19;;
  314. 20|highqual)    MEDIA=20;;
  315. [0-9]*)        ;;
  316. *)        error "Unknown media code $MEDIA";;
  317. esac
  318.  
  319. #
  320. #    Validate source (InputSlot) code
  321. #
  322. case "$SOURCE" in
  323. 1|tray1)    SOURCE=1;;
  324. 4|manual|mp)    SOURCE=4;;
  325. 7|auto)        SOURCE=7;;
  326. [0-9]*)        ;;
  327. *)        error "Unknown source code $SOURCE";;
  328. esac
  329.  
  330. #
  331. #    Validate Duplex code
  332. #
  333. case "$DUPLEX" in
  334. 1|off|none)    DUPLEX=1;;
  335. 2|long*)    DUPLEX=2;;
  336. 3|short*)    DUPLEX=3;;
  337. [0-9]*)        ;;
  338. *)        error "Unknown duplex code $DUPLEX";;
  339. esac
  340.  
  341. #
  342. #    Validate Resolution
  343. #
  344. case "$RES" in
  345. 600x600)    ;;
  346. 1200x600)    ;;
  347. 2400x600)    ;;
  348. *)        error "Illegal resolution $RES";;
  349. esac
  350.  
  351. #
  352. #    Figure out the paper dimensions in pixels/inch, and set the
  353. #    default clipping region.
  354. #
  355. set_clipping() {
  356.     ulx=$1; uly=$2
  357.     lrx=$3; lry=$4
  358.  
  359.     # Set clipping region if it isn't already set
  360.     if [ "$CLIP_UL" = "" ]; then
  361.     case "$RES" in
  362.     600x600)    ulx=`expr $ulx / 2`;;
  363.     2400x600)    ulx=`expr $ulx \* 2`;;
  364.     esac
  365.     CLIP_UL="-u ${ulx}x${uly}"
  366.     fi
  367.     if [ "$CLIP_LR" = "" ]; then
  368.     case "$RES" in
  369.     600x600)    lrx=`expr $lrx / 2`;;
  370.     2400x600)    lrx=`expr $lrx \* 2`;;
  371.     esac
  372.     CLIP_LR="-l ${lrx}x${lry}"
  373.     fi
  374. }
  375.  
  376. case "$PAPER" in
  377. Custom*)
  378.         case "$PAPER" in
  379.         Custom\.[0-9]*\x[0-9]*)
  380.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  381.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  382.             ;;
  383.         *)
  384.         #%%BeginFeature: *CustomPageSize True
  385.         #216
  386.         #360
  387.         #0
  388.         #0
  389.         #0
  390.         #pop pop pop pop pop
  391.  
  392.         #%%BeginFeature: *CustomPageSize True
  393.         #792.000000 612.000000 1 0.000000 0.000000
  394.         #pop pop pop pop pop
  395.  
  396.         if [ $DEBUG = 0 ]; then
  397.             TMPFILE=/tmp/cus$$
  398.         else
  399.             TMPFILE=/tmp/custom.ps
  400.         fi
  401.         cat >$TMPFILE
  402.         exec <$TMPFILE
  403.  
  404.         tmp=`head -n 10000 $TMPFILE \
  405.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  406.             | tr '\n' ' '`
  407.         case "$tmp" in
  408.         [0-9]*\ [0-9]*)
  409.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  410.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  411.             ;;
  412.         *)
  413.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  414.             error "Custom page size [XY]DIM != 1-99999"
  415.             ;;
  416.         esac
  417.         ;;
  418.         esac
  419.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  420.         YDIM=`dc -e "$YDIM 600* 72/p"`
  421.         PAPER=296;      paper=letter;
  422.                 set_clipping 2 100     2 100
  423.         ;;
  424. 1|letter)    PAPER=1;    paper=letter;    XDIM="10200"; YDIM="6600"
  425.         set_clipping 140 100    140 100
  426.         ;;
  427. 3|ledger)    PAPER=3;    paper=ledger;    XDIM="20400"; YDIM="6600"
  428.         set_clipping 140 100    140 100
  429.         ;;
  430. 5|legal)    PAPER=5;    paper=legal;     XDIM="10200"; YDIM="8400"
  431.         set_clipping 140 100    140 100
  432.         ;;
  433. 6|statement)    PAPER=6;    paper=statement; XDIM="6600";  YDIM="5100"
  434.         set_clipping 140 100    140 100
  435.         ;;
  436. 7|executive)    PAPER=7;    paper=executive; XDIM="8700";  YDIM="6300"
  437.         set_clipping 140 100    140 100
  438.         ;;
  439. 8|a3|A3)    PAPER=8;    paper=a3;        XDIM="19842"; YDIM="7014"
  440.         set_clipping 160 100    160 100
  441.         ;;
  442. 9|a4|A4)    PAPER=9;    paper=a4;        XDIM="9920";  YDIM="7014"
  443.         set_clipping 160 100    160 100
  444.         ;;
  445. 11|a5|A5)    PAPER=11;    paper=a5;        XDIM="6992";  YDIM="4960"
  446.         set_clipping 140 100    140 100
  447.         ;;
  448. 12|b4|B4)    PAPER=12;    paper=b4;        XDIM="12142"; YDIM="8598"
  449.         set_clipping 140 100    140 100
  450.         ;;
  451. 13|b5jis|B5jis)    PAPER=13;    paper=b5;        XDIM="8598";  YDIM="6070"
  452.         set_clipping 140 100    140 100
  453.         ;;
  454. 14|folio|Folio)    PAPER=14;    paper=folio;     XDIM="9922";  YDIM="7796"
  455.         set_clipping 140 100    140 100
  456.         ;;
  457. 19|env9|"env#9")
  458.         PAPER=19;    paper=env9;      XDIM="4650";  YDIM="5362"
  459.         set_clipping 140 100    140 100
  460.         ;;
  461. 20|env10|"env#10")
  462.         PAPER=20;    paper=env10;     XDIM="4950";  YDIM="5700"
  463.         set_clipping 140 100    140 100
  464.         ;;
  465. 27|envDL)    PAPER=27;    paper=envDL;     XDIM="5200";  YDIM="5200"
  466.         set_clipping 140 100    140 100
  467.         ;;
  468. 28|envC5)    PAPER=28;    paper=envC5;     XDIM="7650";  YDIM="5408"
  469.         set_clipping 140 100    140 100
  470.         ;;
  471. 30|envC4)    PAPER=30;    paper=envC4;     XDIM="10818"; YDIM="7654"
  472.         set_clipping 140 100    140 100
  473.         ;;
  474. #34|envB5)    PAPER=34;    paper=envB5;     XDIM="8316";  YDIM="5892"
  475. #        set_clipping 140 100    140 100
  476. #        ;;
  477. 37|envMonarch)    PAPER=37;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  478.         set_clipping 140 100    140 100
  479.         ;;
  480. 257|a6|A6)    PAPER=257;    paper=a6;        XDIM="4961";  YDIM="3496"
  481.         set_clipping 140 100    140 100
  482.         ;;
  483. 258|b6|B6)    PAPER=258;    paper=b6;        XDIM="6048";  YDIM="4300"
  484.         set_clipping 140 100    140 100
  485.         ;;
  486. 259|b5iso|B5iso)
  487.         PAPER=259;    paper=b5iso;     XDIM="8516";  YDIM="5906"
  488.         set_clipping 140 100    140 100
  489.         ;;
  490. 260|env6|"env#6")
  491.         PAPER=260;    paper=env6;     XDIM="4356";  YDIM="3900"
  492.         set_clipping 140 100    140 100
  493.         ;;
  494. *)        error "Unimplemented paper code $PAPER";;
  495. esac
  496. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  497. PAPERSIZE="-sPAPERSIZE=$paper";
  498.  
  499.  
  500. case "$RES" in
  501. 600x600)    XDIM=`expr $XDIM / 2`;;
  502. 1200x600)    ;;
  503. 2400x600)    XDIM=`expr $XDIM \* 2`;;
  504. esac
  505. if [ $ROTATE90 = 1 ]; then
  506.     tmp=$XDIM
  507.     XDIM=$YDIM
  508.     YDIM=$tmp
  509.     case "$RES" in
  510.     600x600)        YDIMpoints=`dc -e "6k $YDIM 600 / 72 *p"`;;
  511.     1200x600)       YDIMpoints=`dc -e "6k $YDIM 1200 / 72 *p"`;;
  512.     2400x600)       YDIMpoints=`dc -e "6k $YDIM 2400 / 72 *p"`;;
  513.     esac
  514. fi
  515. DIM="${XDIM}x${YDIM}"
  516.  
  517. #
  518. # Filter thru psnup if N-up printing has been requested
  519. #
  520. case $NUP in
  521. [234689]|1[024568])    PREFILTER="nup";;
  522. *)            PREFILTER=cat;;
  523. esac
  524. if [ "$DEBUG" -ge 9 ]; then
  525.     PREFILTER="tee /tmp/$BASENAME.ps"
  526. fi
  527.  
  528. #
  529. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  530. #    then convert the ICC color profile to a Postscript CRD,
  531. #    then prepend it to the users job.  Select the intent
  532. #    using the -I option.
  533. #
  534.  
  535. create_crd() {
  536.     #
  537.     # Create a Postscript CRD
  538.     #
  539.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  540.     if [ -x $ICC2PS ]; then
  541.     case "$GAMMAFILE" in
  542.     none | none.icm | */none.icm)
  543.         ;;
  544.     *)
  545.         if [ -x /usr/bin/logger ]; then
  546.         logger -t "$BASENAME" -p lpr.info -- \
  547.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  548.         fi
  549.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  550.         || error "Problem converting .ICM file to Postscript"
  551.         ;;
  552.     esac
  553.  
  554.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  555.     cat > $ICCTMP.usecie.ps <<-EOF
  556.         %!PS-Adobe-3.0
  557.         <</UseCIEColor true>>setpagedevice
  558.     EOF
  559.     if [ "$QUALITY" = wts ]; then
  560.         cat >> $ICCTMP.usecie.ps <<-EOF
  561.         << /UseWTS true >> setuserparams
  562.         <<
  563.             /AccurateScreens true
  564.             /HalftoneType 1
  565.             /HalftoneName (Round Dot Screen) cvn
  566.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  567.             /Frequency 137
  568.             /Angle 37
  569.         >> sethalftone
  570.         EOF
  571.     fi
  572.     cat > $ICCTMP.selcrd.ps <<-EOF
  573.         /Current /ColorRendering findresource setcolorrendering
  574.     EOF
  575.     case "$GAMMAFILE" in
  576.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  577.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  578.     esac
  579.     else
  580.     GAMMFILE=
  581.     fi
  582. }
  583.  
  584. if [ $DEBUG -gt 0 ]; then
  585.     ICCTMP=/tmp/icc
  586. else
  587.     ICCTMP=/tmp/icc$$
  588. fi
  589.  
  590. if [ "" = "$COLOR" ]; then
  591.     COLORMODE=
  592.     GAMMAFILE=
  593. else
  594.     case "$COLORMODE" in
  595.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  596.     esac
  597.     case "$GAMMAFILE" in
  598.     default)    GAMMAFILE=hpclj2600n-1.icm;;
  599.     esac
  600. fi
  601.  
  602. PSTOPS_OPTS="-n"
  603. if [ $ROTATE90 = 1 ]; then
  604.     PSTOPS_OPTS="$PSTOPS_OPTS -h $YDIMpoints -r"
  605. fi
  606.  
  607. case "$COLORMODE" in
  608. 0|"")
  609.     # Monochrome
  610.     ;;
  611. 10|icm)
  612.     # Use old ICM method
  613.     AIB=-A
  614.     BC=-B
  615.     case "$GAMMAFILE" in
  616.     none | none.icm | */none.icm)
  617.     create_crd
  618.     ;;
  619.     *.icm|*.ICM|*.icc|*.ICC)
  620.     #
  621.     # Its really an .ICM file, not a gamma file.
  622.     #
  623.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  624.     #
  625.         if [ -r "$GAMMAFILE" ]; then
  626.         create_crd
  627.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  628.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  629.         create_crd
  630.     else
  631.         GAMMAFILE=
  632.     fi
  633.     ;;
  634.     esac
  635. esac
  636.  
  637. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  638.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  639. fi
  640.  
  641. if [ "" != "$COLOR" ]; then
  642.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  643.     # Faster, but can't handle AllIsBlack or BlackClears
  644.     GSDEV=-sDEVICE=pksmraw
  645.     else
  646.     # Can't handle different size pages
  647.     GSDEV=-sDEVICE=bitcmyk
  648.     fi
  649. fi
  650.  
  651. #
  652. #    Figure out USERNAME
  653. #
  654. if [ "$LPUSER" != "" ]; then
  655.     USER="$LPUSER@$LPHOST"
  656. else
  657.     USER=""
  658. fi
  659.  
  660. #
  661. #    Main Program, just cobble together the pipeline and run it
  662. #
  663. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  664. #    (some versions?) of Ghostscript where Postscript's stdout gets
  665. #    intermingled with the printer drivers output, resulting in
  666. #    corrupted image data.
  667. #
  668. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  669.  
  670. foo2zjs-pstops $PSTOPS_OPTS | \
  671. $PREFILTER \
  672. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  673.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null 2>/dev/null) 3>&1 \
  674. | foo2oak -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  675.         -M$MIRROR $COLOR -b$BPP $CLIP_UL $CLIP_LR $CLIP_LOG \
  676.         -J "$LPJOB" -U "$USER" \
  677.         $BC $AIB $COLOR2MONO -D$DEBUG
  678.  
  679. #
  680. #    Log the command line, for debugging and problem reports
  681. #
  682. if [ -x /usr/bin/logger ]; then
  683.     logger -t "$BASENAME" -p lpr.info -- \
  684.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  685.     logger -t "$BASENAME" -p lpr.info -- \
  686.     "foo2oak -r$RES -g$DIM -p$PAPER -m$MEDIA \
  687. -n$COPIES -d$DUPLEX -s$SOURCE -M$MIRROR $COLOR -b$BPP \
  688. $CLIP_UL $CLIP_LR $CLIP_LOG \
  689. $BC $AIB $COLOR2MONO"
  690. fi
  691.  
  692. #
  693. #    Remove cruft
  694. #
  695. if [ $DEBUG -eq 0 ]; then
  696.     for i in crd.ps log usecie.ps selcrd.ps
  697.     do
  698.     file="$ICCTMP.$i"
  699.     [ -f $file ] && rm -f $file
  700.     done
  701.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  702. fi
  703.  
  704. exit 0
  705.